package com.mastercard.assets.web.struts.actions;

import com.mastercard.assets.jpa.TblAsset;
import com.mastercard.assets.jpa.TblCuenta;
import com.mastercard.assets.jpa.TblCuentaPaquete;
import com.mastercard.assets.jpa.TblPaquete;
import com.mastercard.assets.jpa.TblTipoCuentaPaquete;
import com.mastercard.assets.util.dao.MasterCardDAO;
import com.mastercard.assets.web.struts.forms.AssetAsignarPaquetesBDMTitularForm;
import com.mastercard.assets.web.util.to.BDMTitularTO;
import com.mastercard.assets.web.util.to.CuentasPaquetesTo;
import com.mastercard.assets.web.util.to.ManejadorPaquetesDeAssetBDMTitular;
import com.mastercard.assets.web.util.to.UserLogin;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class AssetsAsignacionPaquetesPreparacionBDMTitular
        extends
		Action
{
        public ActionForward execute(
							ActionMapping mapping , 
							ActionForm form ,
							HttpServletRequest request , 
							HttpServletResponse response )
		throws 
			IOException , 
			ServletException
        {
            HttpSession session = request.getSession( ) ;
		
		// en caos de null
		if( session == null )
			return mapping.findForward( "noLogin" ) ;
		
		// toma el userLogin
		UserLogin user = ( UserLogin ) session.getAttribute( "UserLogin" ) ;
		int roleId = user.getActualRoleId( ) ;
                
		// en caso de null
		if( user == null )
			return mapping.findForward( "noLogin" ) ;
                
                try
		{
                    AssetAsignarPaquetesBDMTitularForm fo = ( AssetAsignarPaquetesBDMTitularForm ) form ;
			// convierte el form y toma la clave
                    AssetAsignarPaquetesBDMTitularForm f = new AssetAsignarPaquetesBDMTitularForm( ) ;
			
			// toma los elementos encontrados
			TblAsset asset = MasterCardDAO.getAsset( fo.getAsset( ) ) ;
			f.setAsset( asset.getCveAsset( ) ) ;
                        
                        List< TblCuenta > cuentas = MasterCardDAO.getAllActiveCountsWithCountType(  user.getCountType().getCveTipoCuenta( ) ) ;
                        f.setCuentas( cuentas ) ;
			
                        List< CuentasPaquetesTo > manejador = new ArrayList< CuentasPaquetesTo >( ) ;
                        
                        List< TblTipoCuentaPaquete > tcp =
                                MasterCardDAO.getAllPackageInCountTypeAndStatusBDM
                                ( 1, 1, f.getAsset( ) , user.getCountType().getCveTipoCuenta( ) ) ;
                        
                        int PaquetesTotales = tcp.size( ) , 
                                PaquetesAsignados = 0 ,
                                PaquetesDisponibles = 0 ,
                                Sz = cuentas.size( ) ;
                        
        
                        ManejadorPaquetesDeAssetBDMTitular
                                paqueteSLL = new ManejadorPaquetesDeAssetBDMTitular( "sll","Sencillo","Local","Local",0,0,0 ) ,
                                paqueteDLL = new ManejadorPaquetesDeAssetBDMTitular( "dll","Doble","Local","Local",0,0,0 ) ,
                                paqueteSLR = new ManejadorPaquetesDeAssetBDMTitular( "slr","Sencillo","Local","Regional",0,0,0 ) ,
                                paqueteDLR = new ManejadorPaquetesDeAssetBDMTitular( "dlr","Doble","Local","Regional",0,0,0 ) ,
                                paqueteSRL = new ManejadorPaquetesDeAssetBDMTitular( "srl","Sencillo","Regional","Local",0,0,0 ) ,
                                paqueteDRL = new ManejadorPaquetesDeAssetBDMTitular( "drl","Doble","Regional","Local",0,0,0 ) ,
                                paqueteSRR = new ManejadorPaquetesDeAssetBDMTitular( "srr","Sencillo","Regional","Regional",0,0,0 ) ,
                                paqueteDRR = new ManejadorPaquetesDeAssetBDMTitular( "drr","Doble","Regional","Regional",0,0,0 ) ;
                        
                        for( TblTipoCuentaPaquete TCP : tcp )
                        {
                            
                            if( TCP.getBandera( ) == 1 )
                            {
                                PaquetesDisponibles += 1 ;
                            } else
                                if( TCP.getBandera( ) == 3 )
                                    PaquetesAsignados += 1 ;
                            
                            // obtiene el paquete
                            TblPaquete paq = TCP.getTblPaquete( ) ;
                            
                            List< TblCuentaPaquete > cuentaPaquete = paq.getTblCuentaPaquetes( ) ;
                            
                            
                            int habitacion = paq.getHabitacion( ) ,
                                    fondeado = paq.getFondeado( ) ,
                                    facturado = paq.getFacturadoA( ) ;
                            
                            if( habitacion == 1 && fondeado == 1 && facturado == 1 )// PARA paqueteSLL "Sencillo","Local","Local"
                            {
                                paqueteSLL.setCantidad( paqueteSLL.getCantidad( ) + 1 ) ;                                
                                if( TCP.getBandera( ) == 3 ){ paqueteSLL.setAsignados( paqueteSLL.getAsignados( ) + 1 ) ;}
                                else
                                    if( TCP.getBandera( ) == 1 ){paqueteSLL.setDisponibles( paqueteSLL.getDisponibles( ) + 1 ) ;}
                                                                
                                for( TblCuenta c : cuentas )
                                {
                                    CuentasPaquetesTo cpTo = new CuentasPaquetesTo( 0 , 0 , 0 , 0 ) ;
                                    cpTo.setCuenta( c.getCveCuenta( ) ) ;
                                    cpTo.setTipo( 1 ) ;
                                    if( !cuentaPaquete.isEmpty( ) )
                                    {
                                        for( TblCuentaPaquete cp : cuentaPaquete )
                                        {
                                            if( c == cp.getTblCuenta( ) && cp.getStatus( ) == 1 )
                                            {
                                                cpTo.setPaquetes( cpTo.getPaquetes( ) + 1 ) ; 
                                            }
                                        }
                                    } 
                                    manejador.add( cpTo ) ;
                                }
                                                                
                            }else if( habitacion == 2 && fondeado == 1 && facturado == 1 )// PARA paqueteDLL "Doble","Local","Local"
                            {
                                paqueteDLL.setCantidad( paqueteDLL.getCantidad( ) + 1 ) ;
                                if( TCP.getBandera( ) == 3 ){ paqueteDLL.setAsignados( paqueteDLL.getAsignados( ) + 1 ) ; }
                                else
                                    if( TCP.getBandera( ) == 1 ){ paqueteDLL.setDisponibles( paqueteDLL.getDisponibles( ) + 1 ) ; }
                                
                                for( TblCuenta c : cuentas )
                                {
                                    CuentasPaquetesTo cpTo = new CuentasPaquetesTo( 0 , 0 , 0 , 0 ) ;
                                    cpTo.setCuenta( c.getCveCuenta( ) ) ;
                                    cpTo.setTipo( 2 ) ;
                                    if( !cuentaPaquete.isEmpty( ) )
                                    {
                                        for( TblCuentaPaquete cp : cuentaPaquete )
                                        {
                                            if( c == cp.getTblCuenta( ) && cp.getStatus( ) == 1 )
                                            {
                                                cpTo.setPaquetes( cpTo.getPaquetes( ) + 1 ) ; 
                                            }
                                        }
                                    } 
                                    manejador.add( cpTo ) ;
                                }
                                
                            }else if( habitacion == 1 && fondeado == 1 && facturado == 2 )// PARA paqueteSLR "Sencillo","Local","Regional"
                            {
                                paqueteSLR.setCantidad( paqueteSLR.getCantidad( ) + 1 ) ;
                                if( TCP.getBandera( ) == 3 ){ paqueteSLR.setAsignados( paqueteSLR.getAsignados( ) + 1 ) ; }
                                else
                                    if( TCP.getBandera( ) == 1 ){ paqueteSLR.setDisponibles( paqueteSLR.getDisponibles( ) + 1 ) ; }
                                                                
                                for( TblCuenta c : cuentas )
                                {
                                    CuentasPaquetesTo cpTo = new CuentasPaquetesTo( 0 , 0 , 0 , 0 ) ;
                                    cpTo.setCuenta( c.getCveCuenta( ) ) ;
                                    cpTo.setTipo( 3 ) ;
                                    if( !cuentaPaquete.isEmpty( ) )
                                    {
                                        for( TblCuentaPaquete cp : cuentaPaquete )
                                        {
                                            if( c == cp.getTblCuenta( ) && cp.getStatus( ) == 1 )
                                            {
                                                cpTo.setPaquetes( cpTo.getPaquetes( ) + 1 ) ;
                                            }
                                        }
                                    }
                                    manejador.add( cpTo ) ;
                                }
                                
                            }else if( habitacion == 2 && fondeado == 1 && facturado == 2 )// PARA paqueteDLR "Doble","Local","Regional"
                            {
                                paqueteDLR.setCantidad( paqueteDLR.getCantidad( ) + 1 ) ;
                                if( TCP.getBandera( ) == 3 ){ paqueteDLR.setAsignados( paqueteDLR.getAsignados( ) + 1 ) ; }
                                else
                                    if( TCP.getBandera( ) == 1 ){ paqueteDLR.setDisponibles( paqueteDLR.getDisponibles( ) + 1 ) ; }
                                                                
                                for( TblCuenta c : cuentas )
                                {
                                    CuentasPaquetesTo cpTo = new CuentasPaquetesTo( 0 , 0 , 0 , 0 ) ;
                                    cpTo.setCuenta( c.getCveCuenta( ) ) ;
                                    cpTo.setTipo( 4 ) ;
                                    if( !cuentaPaquete.isEmpty( ) )
                                    {
                                        for( TblCuentaPaquete cp : cuentaPaquete )
                                        {
                                            if( c == cp.getTblCuenta( ) && cp.getStatus( ) == 1 )
                                            {
                                                cpTo.setPaquetes( cpTo.getPaquetes( ) + 1 ) ;
                                            }
                                        }
                                    }
                                    manejador.add( cpTo ) ;
                                }
                                
                            }else if( habitacion == 1 && fondeado == 2 && facturado == 1 )// PARA paqueteSRL "Sencillo","Regional","Local"
                            {
                                paqueteSRL.setCantidad( paqueteSRL.getCantidad( ) + 1 ) ;
                                if( TCP.getBandera( ) == 3 ){ paqueteSRL.setAsignados( paqueteSRL.getAsignados( ) + 1 ) ; }
                                else
                                    if( TCP.getBandera( )== 1 ){ paqueteSRL.setDisponibles( paqueteSRL.getDisponibles( ) + 1 ) ; }
                                                                
                                for( TblCuenta c : cuentas )
                                {
                                    CuentasPaquetesTo cpTo = new CuentasPaquetesTo( 0 , 0 , 0 , 0 ) ;
                                    cpTo.setCuenta( c.getCveCuenta( ) ) ;
                                    cpTo.setTipo( 5 ) ;
                                    if( !cuentaPaquete.isEmpty( ) )
                                    {
                                        for( TblCuentaPaquete cp : cuentaPaquete )
                                        {
                                            if( c == cp.getTblCuenta( ) && cp.getStatus( ) == 1 )
                                            {
                                                cpTo.setPaquetes( cpTo.getPaquetes( ) + 1 ) ;
                                            }
                                        }
                                    }
                                    manejador.add( cpTo ) ;
                                }
                                
                            }else if( habitacion == 2 && fondeado == 2 && facturado == 1 )// PARA paqueteDRL "Doble","Regional","Local"
                            {
                                paqueteDRL.setCantidad( paqueteDRL.getCantidad( ) + 1 ) ;
                                if( TCP.getBandera( ) == 3 ){ paqueteDRL.setAsignados( paqueteDRL.getAsignados( ) + 1 ) ; }
                                else
                                    if( TCP.getBandera( ) == 1 ){ paqueteDRL.setDisponibles( paqueteDRL.getDisponibles( ) + 1 ) ; }
                                                                
                                for( TblCuenta c : cuentas )
                                {
                                    CuentasPaquetesTo cpTo = new CuentasPaquetesTo( 0 , 0 , 0 , 0 ) ;
                                    cpTo.setCuenta( c.getCveCuenta( ) ) ;
                                    cpTo.setTipo( 6 ) ;
                                    if( !cuentaPaquete.isEmpty( ) )
                                    {
                                        for( TblCuentaPaquete cp : cuentaPaquete )
                                        {
                                            if( c == cp.getTblCuenta( ) && cp.getStatus( ) == 1 )
                                            {
                                                cpTo.setPaquetes( cpTo.getPaquetes( ) + 1 ) ;
                                            }
                                        }
                                    }
                                    manejador.add( cpTo ) ;
                                }
                                
                            }else if( habitacion == 1 && fondeado == 2 && facturado == 2 )// PARA paqueteSRR "Sencillo","Regional","Regional"
                            {
                                paqueteSRR.setCantidad( paqueteSRR.getCantidad( ) + 1 ) ;
                                if( TCP.getBandera( ) == 3 ){ paqueteSRR.setAsignados( paqueteSRR.getAsignados( ) + 1 ) ; }
                                else
                                    if( TCP.getBandera( ) == 1 ){ paqueteSRR.setDisponibles( paqueteSRR.getDisponibles( ) + 1 ) ; }
                                                                
                                for( TblCuenta c : cuentas )
                                {
                                    CuentasPaquetesTo cpTo = new CuentasPaquetesTo( 0 , 0 , 0 , 0 ) ;
                                    cpTo.setCuenta( c.getCveCuenta( ) ) ;
                                    cpTo.setTipo( 7 ) ;
                                    if( !cuentaPaquete.isEmpty( ) )
                                    {
                                        for( TblCuentaPaquete cp : cuentaPaquete )
                                        {
                                            if( c == cp.getTblCuenta( ) && cp.getStatus( ) == 1 )
                                            {
                                                cpTo.setPaquetes( cpTo.getPaquetes( ) + 1 ) ;
                                            }
                                        }
                                    }
                                    manejador.add( cpTo ) ;
                                }
                                
                            }else if( habitacion == 2 && fondeado == 2 && facturado == 2 )// PARA paqueteDRR "Doble","Regional","Regional"
                            {
                                paqueteDRR.setCantidad( paqueteDRR.getCantidad( ) + 1 ) ;
                                if( TCP.getBandera( ) == 3 ){ paqueteDRR.setAsignados( paqueteDRR.getAsignados( ) + 1 ) ; }
                                else
                                    if( TCP.getBandera( ) == 1 ){ paqueteDRR.setDisponibles( paqueteDRR.getDisponibles( ) + 1 ) ; }
                                                                
                                for( TblCuenta c : cuentas )
                                {
                                    CuentasPaquetesTo cpTo = new CuentasPaquetesTo( 0 , 0 , 0 , 0 ) ;
                                    cpTo.setCuenta( c.getCveCuenta( ) ) ;
                                    cpTo.setTipo( 8 ) ;
                                    if( !cuentaPaquete.isEmpty( ) )
                                    {
                                        for( TblCuentaPaquete cp : cuentaPaquete )
                                        {
                                            if( c == cp.getTblCuenta( ) && cp.getStatus( ) == 1 )
                                            {
                                                cpTo.setPaquetes( cpTo.getPaquetes( ) + 1 ) ;
                                            }
                                        }
                                    }
                                    manejador.add( cpTo ) ;
                                }
                                                                
                            }
                        }
                        
                        // depura el manejador
                        
                        List< CuentasPaquetesTo > manejador2 = new ArrayList< CuentasPaquetesTo >( ) ;
                        
                        for( CuentasPaquetesTo m : manejador )
                        {
                            if( manejador2.isEmpty() )
                            {
                                manejador2.add( m ) ;
                            }else
                            {
                                int paqM = m.getPaquetes( ) , ctaM = m.getCuenta( ), tipoM = m.getTipo( ) ;
                                boolean yaEsta = false ;
                                
                                for( CuentasPaquetesTo m2 : manejador2 )
                                {
                                    int  paqM2 = m2.getPaquetes( ) , ctaM2 = m2.getCuenta( ) , tipoM2 = m2.getTipo( )  ;
                                    if( tipoM == tipoM2 && ctaM == ctaM2 )
                                    {
                                        m2.setPaquetes( paqM2 + paqM ) ;
                                        yaEsta = true ;
                                    }
                                    
                                    if( yaEsta == true )
                                    {
                                        break ;
                                    }                                    
                                }
                                
                                if( yaEsta == false )
                                {
                                    manejador2.add( m ) ;
                                }
                                
                            }
                        }
                                                
                        BDMTitularTO b = new BDMTitularTO( ) ;
                        
                        b.setPaqueteSLL( paqueteSLL ) ;
                        b.setPaqueteDLL( paqueteDLL ) ;
                        b.setPaqueteSLR( paqueteSLR ) ;
                        b.setPaqueteDLR( paqueteDLR ) ;
                        b.setPaqueteSRL( paqueteSRL ) ;
                        b.setPaqueteDRL( paqueteDRL ) ;
                        b.setPaqueteSRR( paqueteSRR ) ;
                        b.setPaqueteDRR( paqueteDRR ) ;
                        b.setManejador( manejador2 ) ;
                        
                        f.setPaquetesTotales( PaquetesTotales ) ;
                        f.setPaquetesDisponibles( PaquetesDisponibles ) ;
                        f.setPaquetesAsignados( PaquetesAsignados ) ;
                        f.setBdmT( b ) ;

                        request.setAttribute( "UserLogin" , user ) ;
                        request.setAttribute("Asset", asset.getNombre( ) ) ;
                        request.setAttribute( "form", f ) ;
			
		}catch( Exception e )
		{
                    MasterCardDAO.closeEntityManager( ) ;
			e.printStackTrace( ) ;
			user.setMessageError( e.getMessage( ) ) ;
		}
                
                user.setNextWorkArea( "/WEB-INF/pages/WorkArea/AssetsAsignarPaqueteDesplegarFormularioBDMTitular.jsp" ) ;
		
                MasterCardDAO.closeEntityManager( ) ;
	  	return mapping.findForward( "success" ) ;
        }
}
